import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import { visualizer } from 'rollup-plugin-visualizer';
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
import { VitePWA } from 'vite-plugin-pwa'


// https://vitejs.dev/config/
export default defineConfig({
  plugins: [
    vue(),
    visualizer({
      open:false,// open:true参数要加上,否则build完成后不会自动打开分析页面
    }),
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
    VitePWA({
      workbox:{
          cacheId:"cacheTextId",//缓存名称
          runtimeCaching:[
            {
              urlPattern:/.*\.js.*/, //缓存文件
              handler:"StaleWhileRevalidate", //重新验证时失效
              options:{
                cacheName:"cacheTextId-js", //缓存js，名称
                expiration:{
                  maxEntries:30, //缓存文件数量 LRU算法
                  maxAgeSeconds:30 * 24 * 60 * 60 //缓存有效期
                }
              }
            }
          ]
      }})
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url))
    }
  },
  build: {
      cssCodeSplit:true, //是否做css 拆分，如果禁用，整个项目中的所有 CSS 将被提取到一个 CSS 文件中。
      sourcemap:false, //不生成sourcemap 后期可以跟sentry 异常数据上报配合使用
      //是否禁用最小化混淆，esbuild打包速度最快，terser打包体积最小
      //类型： boolean | 'terser' | 'esbuild' 默认： 'esbuild'
      minify:false, 
      assetsInlineLimit:5000, //小于该值 图片将打包成Base64 
      // rollup 配置
      rollupOptions: {
        output: {
            // key自定义 value[] 插件同步package.json名称 或 src/相对路径下的指定文件 （自己可以看manualChunks ts类型）
            manualChunks: {
                // vue vue-router合并打包
                vue: ['vue', 'vue-router'],
                // echarts: ['echarts'],
                element: ['element-plus'],
                // 两个文件合并成一个helloWorld文件
                helloWorld: ['src/components/HelloWorld.vue','src/components/TheWelcome.vue'],
            }
      }
    }
  },
  // 预编译介绍文档：http://wed.xjx100.cn/news/389258.html
  optimizeDeps: {
    //exclude 属性用于排除某些不需要预编译的依赖
   include: ['element-plus'],//将 element-plus 加入预编译
   // 属性用于添加需要预编译的依赖
   exclude: ['moment'],// 将 moment 移除预编译
 },
})
